package Consumer;

import java.util.function.Consumer;

/*
Consumer<T>包含两个方法
void accept(T t)
对给定的参数执行此操作。
default Consumer<T> andThen(Consumer<? super T> after)
返回一个组合的 Consumer ，按顺序执行该操作，然后执行 after操作。
Consumer<T>接口也被称为消费型接口，它消费的数据的数据类型由泛型指定
 */
public class ConsumerDemo {
    public static void main(String[] args) {
 //操作字符串数据
//        operatorString("姜恒星",(String s)->{
//            System.out.println(s);
//        });
             //简化
      operatorString("姜恒星",s-> System.out.println(s));
//      operatorString("姜恒星",System.out::println);

//        operatorString("姜恒星",s -> {
//            new StringBuilder(s).reverse().toString();//通过reverse进行反转在转换为字符串
//            System.out.println(new StringBuilder(s).reverse().toString());
//        });
              //简化
        operatorString("姜恒星",s -> System.out.println(new StringBuilder(s).reverse().toString()));
        System.out.println("---------");

        operatorString("姜恒星",s-> System.out.println(s),s -> System.out.println(new StringBuilder(s).reverse().toString()));

    }

      //定义一个方法，用不同的方式消费同一个字符串数据两次
    //进行两次操作，在Lambda表达式中只有第一个是参数，后面两个是对参数的消费操作
    private static void operatorString(String name, Consumer<String>con1,Consumer<String>con2) {
        con1.accept(name);
        con2.accept(name);

        //改进
        con1.andThen(con2).accept(name);//将两个consumer进行组合
    }

      //定义一个方法消费一个字符串数据
    private static void operatorString(String name, Consumer<String>con){
        con.accept(name);
    }

}
